<?php
/**
 *
 * 样例的作用仅限于指导如何使用sdk，在安全上面仅做了简单处理， 复制使用样例代码时请慎重
 * 请勿直接直接使用样例对外提供服务
 **/
require_once "../sdk/QH.Api.php";
require_once '../sdk/QH.Notify.php';
require_once "QH.Config.php";
require_once 'log.php';
header("Content-Type:application/json;charset=utf-8");
//初始化日志
$logHandler = new CLogFileHandler("./logs/" . date('Y-m-d') . '.log');
$log = Log::Init($logHandler, 15);

class QHNotifyCallBack extends QHNotify
{
    /**
     *
     * 回包前的回调方法
     * 业务可以继承该方法，打印日志方便定位
     * @param string $jsonData 返回的json参数
     **/
    public function LogAfterProcess($jsonData)
    {
        Log::DEBUG("call back， return json:" . $jsonData);
        return;
    }

    //重写回调处理函数

    /**
     * @param QHNotify $QHNotify 回调解释出的参数
     * @param QHConfigInterface $config
     * @param string $msg 如果回调处理失败，可以将错误信息输出到该方法
     * @return bool true回调出来完成不需要继续回调，false回调处理未完成需要继续回调
     */
    public function NotifyProcess($QHNotify, $config, &$msg)
    {
        // 1、进行参数校验
        if ($QHNotify->isEmpty("task_id")) {
            $msg = "缺少task_id";
            return false;
        }
        if ($QHNotify->isEmpty("app_key")) {
            $msg = "缺少app_key";
            return false;
        }
        if ($QHNotify->isEmpty("user_id")) {
            $msg = "缺少user_id";
            return false;
        }

        // 2、进行签名验证
        try {
            $QHNotify->verifySign($config);
        } catch (Exception $e) {
            Log::ERROR(json_encode($e));
            $msg = "签名错误";
            return false;
        }

        //TODO 3、处理业务逻辑
        //  do something
        $data = $QHNotify->getValues();
        Log::DEBUG("call back:" . json_encode($data));
        return true;
    }
}

$config = new QHConfig();
Log::DEBUG("begin notify");
$notify = new QHNotifyCallBack();
$notify->Handle($config, true);
